import numpy as np

a = np.array([1, 2, 3, 4, 5, 6])
a_2d = a[np.newaxis, :]
print(a.shape, a_2d.shape)
print(a_2d)  # 增加了维度
print("*******************")

a_none = a[:, None]
a_expand = np.expand_dims(a, axis=1)
print(a_none)
print(a_expand)

# shape功能是读取矩阵的长度，比如shape[0]就是读取矩阵第一维度的长度。
print(a_none.shape, a_expand.shape)
print("*******************")

a_squeeze = np.squeeze(a_expand)
a_squeeze_axis = a_expand.squeeze(axis=1)
print(a_squeeze.shape)
print(a_squeeze_axis.shape)
print("*******************")
a = np.array([1, 2, 3, 4, 5, 6])
a1 = a.reshape([2, 3])
a2 = a.reshape([3, 1, 2])
print("a1 shape:", a1.shape)
print(a1)
print("a2 shape:", a2.shape)
print(a2)

print("*******************")

# 矩阵装置
a = np.array([1, 2, 3, 4, 5, 6]).reshape([2, 3])
aT1 = a.T
aT2 = np.transpose(a)

print(aT1)
print(aT2)

print("*******************")

# 列合并
feature_a = np.array([1, 2, 3, 4, 5, 6])
feature_b = np.array([11, 22, 33, 44, 55, 66])
c_stack = np.column_stack([feature_a, feature_b])
print(c_stack)

print("*******************")
# 行合并
sample_a = np.array([0, 1.1])
sample_b = np.array([1, 2.2])
c_stack = np.row_stack([sample_a, sample_b])
print(c_stack)

print("*******************")
a = np.array([
    [1, 2],
    [3, 4]
])
b = np.array([
    [5, 6],
    [7, 8]
])
# numpy当中axis的值表示的是这个多维数组维度的下标，
# 比如有一个二维数组a，a的shape是(5,6)，也就是说a有5行6列，
# axis=0表示的就是[5,6]中的第一维，也就是行，
# axis=1表示的是[5,6]中的第二个维度，也就是列。
print(np.concatenate([a, b], axis=0))
print(np.concatenate([a, b], axis=1))

a = np.array(
    [[1, 11, 2, 22],
     [3, 33, 4, 44],
     [5, 55, 6, 66],
     [7, 77, 8, 88]]
)
print(np.vsplit(a, indices_or_sections=2))  # 分成两段
print(np.vsplit(a, indices_or_sections=[2, 3]))  # 0~2 一段，2~3 一段，3~一段

a = np.array(
    [[1, 11, 2, 22],
     [3, 33, 4, 44],
     [5, 55, 6, 66],
     [7, 77, 8, 88]]
)
print(np.split(a, indices_or_sections=2, axis=0))  # 分成两段
print(np.split(a, indices_or_sections=[2, 3], axis=1))  # 在第二维度， 0~2 一段，2~3 一段，3~一段


